home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power DOS 1996 July
/
Power DOS - July 1996.iso
/
sound
/
c_labs
/
awe
/
adip.exe
/
ADIP02.ZIP
/
WINDOWS
/
SAMPLE
/
WINAWE32.C
< prev
next >
Wrap
C/C++ Source or Header
|
1994-07-08
|
22KB
|
763 lines
/*****************************************************************************
* *
* WINAWE32 Sample demo for Sound Blaster Advanced WavEffects *
* *
* (C) Copyright Creative Technology Ltd. 1992-94. All rights reserved *
* worldwide. *
* *
* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY *
* KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE *
* IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR *
* PURPOSE. *
* *
* You have a royalty-free right to use, modify, reproduce and *
* distribute the Sample Files (and/or any modified version) in *
* any way you find useful, provided that you agree to *
* the Creative's Software Licensing Aggreement and you also agree that *
* Creative has no warranty obligations or liability for any Sample Files. *
* *
******************************************************************************/
/*****************************************************************************\
* File name : WINAWE32.C *
* *
* Programmer : Cheng Kok Hoong *
* Creative Technology Ltd, 1994. All rights reserved. *
* *
* Version : 1.1.1 *
* *
* WINAWE32 is a sample application that uses SB AWE32's AWEMAN.DLL *
* and AWEGUI.DLL *
* *
******************************************************************************/
#include "windows.h"
#include "mmsystem.h"
#include "winawe32.h"
#include "awe_dll.h"
#include "awe_api.h"
#include "mci.h"
#include "commdlg.h"
#include "string.h"
BOOL InitAWEDLL(void);
BOOL OpenAWEMAN(void);
BOOL CloseAWEMAN(void);
BOOL FetchMIDIFile(HWND);
BOOL FetchUserBankFile(HWND);
void SetReverb(WORD);
void SetChorus(WORD);
BOOL bIsMIDIPlaying = FALSE;
BOOL bIsUserBankLoaded = FALSE;
typedef LRESULT (FAR PASCAL *LPCONTROLPANEL)(LPCSTR, BOOL);
typedef LRESULT (FAR PASCAL *LPCONTROLLERBOB)(LPCSTR, BOOL);
LPCONTROLPANEL lpControlPanel = NULL;
LPCONTROLLERBOB lpControllerBob = NULL;
LPFNAWEMANAGER lpAWEManager = NULL;
HANDLE hInst;
HANDLE hAWEGUIDLL = NULL;
HANDLE hAWEMANDLL = NULL;
AWEHANDLE hAWEHandle = NULL;
WORD wMCIDeviceID = 0;
HWND hWndDemo = NULL;
char szFileName[128];
char szBareName[12];
char szUserBankName[128];
HMIDIOUT hMIDIOut;
#define USER_BANK_NUM 1
int PASCAL WinMain(HANDLE hInstance,
HANDLE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
if (hPrevInstance)
return FALSE;
else
if (!InitApplication(hInstance))
return (FALSE);
if (!InitInstance(hInstance, nCmdShow))
return (FALSE);
if (!InitAWEDLL() )
return FALSE;
if ( !OpenAWEMAN() ) {
MessageBox(NULL, "Unable to open AWEMAN\0", "Error\0", MB_OK|MB_ICONHAND);
return FALSE;
}
while (GetMessage(&msg, NULL, NULL, NULL) ) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}
BOOL InitApplication(HANDLE hInstance)
{
WNDCLASS wc;
wc.style = NULL;
wc.lpfnWndProc = MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, (LPCSTR)IDI_ICON1);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = "WinAWE32Menu";
wc.lpszClassName = "WinAWE32Class";
return (RegisterClass(&wc));
}
BOOL InitInstance(HANDLE hInstance, int nCmdShow)
{
HWND hWnd;
RECT rectWindow;
hInst = hInstance;
hWnd = CreateWindow(
"WinAWE32Class",
"WinAWE32 Sample Demo",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
if (!hWnd)
return (FALSE);
// Resize the Window
#define WIN_WIDTH 400
#define WIN_HEIGHT 100
GetWindowRect(hWnd, &rectWindow);
MoveWindow(hWnd, rectWindow.left, rectWindow.top, WIN_WIDTH, WIN_HEIGHT, TRUE);
ShowWindow(hWnd, nCmdShow);
hWndDemo = hWnd;
return (TRUE);
}
long CALLBACK __export MainWndProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
CParamObject cObject;
CBufferObject cBufferObj;
DWORD dwMaxDRAM, dwAvailableDRAM;
char ach[128];
HCURSOR hCursor;
cObject.m_SBankIndex = 0;
cObject.m_UBankIndex = 0;
cObject.m_InstrIndex = 0;
cObject.m_TypeIndex = REVERB_CHORUS;
cObject.m_SubIndex = REVERB;
switch (message)
{
case WM_COMMAND: {
switch ( wParam ) {
case ID_CLEAR_BANK: {
if ( bIsUserBankLoaded == TRUE ) {
if ( lpAWEManager(hAWEHandle, AWE_CLEAR_USER_BANK, USER_BANK_NUM, NULL) != AWE_NO_ERR )
MessageBox(NULL, "Error clearing user bank\0", "Error\0", MB_OK|MB_ICONHAND);
else {
MessageBox(NULL, "User Bank 1 unloaded\0", "Info\0", MB_OK);
bIsUserBankLoaded = FALSE;
}
}
}
break;
case ID_STOP_MIDI:
if ( bIsMIDIPlaying == TRUE ) {
if ( MCIEndPlay(wMCIDeviceID) )
MessageBox(NULL, "Error stop playing MCISEQ.\0", "Error.\0", MB_OK|MB_ICONSTOP);
if ( MCICloseDevice(wMCIDeviceID) )
MessageBox(NULL, "Error closing MCISEQ.\0", "Error.\0", MB_OK|MB_ICONSTOP);
bIsMIDIPlaying = FALSE;
}
break;
case ID_LOAD_USERBANK:
if ( FetchUserBankFile(hWnd) ) {
// Now load the bank into user bank 1... not enough
// time to do a flexible user bank dialog box
cBufferObj.m_Size = 128; // Size of string buffer
cBufferObj.m_Flag = OPER_FILE;
cBufferObj.m_Buffer = (LPSTR)szUserBankName;
hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
if ( lpAWEManager(hAWEHandle,
AWE_LOAD_USER_BANK,
(LPARAM)USER_BANK_NUM,
(LPARAM)(LPSTR)&cBufferObj) == AWE_NO_ERR ) {
MessageBox(NULL, "User Bank 1 load successful\0",
"Info\0",
MB_OK);
bIsUserBankLoaded = TRUE;
}
else {
MessageBox(NULL, "User Bank load failed.\0",
"Error\0",
MB_OK);
}
SetCursor(hCursor);
}
break;
case ID_SETTINGS_TRIGGERME:
DialogBox(hInst, /* current instance */
"TriggerMe", /* resource to use */
hWnd, /* parent handle */
TriggerMe); /* About() instance address */
break;
case ID_FILE_OPEN:
if ( FetchMIDIFile(hWnd) ) {
if ( bIsMIDIPlaying == TRUE ) {
MCIEndPlay(wMCIDeviceID);
MCICloseDevice(wMCIDeviceID);
}
if ( MCIOpenDevice(&wMCIDeviceID, szFileName) ) {
MessageBox(NULL, "Error in opening MCI.\0", "Error\0", MB_OK|MB_ICONSTOP);
break;
}
else {
MCIPlayDevice(hWnd, wMCIDeviceID);
bIsMIDIPlaying = TRUE;
// Update main windows's title to reflect the currently playing MIDI file
SetWindowText(hWnd, szBareName);
}
}
break;
case ID_QUIT:
PostMessage(hWnd, WM_DESTROY, NULL, NULL); break;
case IDM_ABOUT:
DialogBox(hInst, /* current instance */
"AboutBox", /* resource to use */
hWnd, /* parent handle */
About); /* About() instance address */
break;
case ID_QUERY_SYNTH: {
CBufferObject buffer;
char voila;
enum SBANK sBank;
buffer.m_Size = sizeof(voila);
buffer.m_Buffer = (LPSTR)&voila;
lpAWEManager(hAWEHandle,
AWE_GET_SYN_BANK,
(LPARAM)(LPBUFFEROBJECT)&buffer,
0L);
sBank = (enum SBANK)buffer.m_Flag;
if ( sBank == GENERAL_MIDI )
MessageBox(NULL, "Current synthesizer mode is General MIDI\0",
"Info\0",
MB_OK);
if ( sBank == ROLAND_GS )
MessageBox(NULL, "Current synthesizer mode is GS\0",
"Info\0",
MB_OK);
if ( sBank == MT_32 )
MessageBox(NULL, "Current synthesizer mode is MT-32\0",
"Info\0",
MB_OK);
}
break;
case ID_QUERY_DRAM:
if ( lpAWEManager(hAWEHandle,
AWE_QUERY_DRAM_SIZE,
(LPARAM)(LPSTR)&dwMaxDRAM,
(LPARAM)(LPSTR)&dwAvailableDRAM) == AWE_NO_ERR ) {
(void)wsprintf(ach, "TotalDRAM = %lu bytes, AvailableDRAM = %lu bytes\0", dwMaxDRAM*2, dwAvailableDRAM*2);
MessageBox(NULL, ach, "DRAM Info\0", MB_OK);
}
break;
case ID_GUI_CONTROLPANEL: {
LRESULT result = lpControlPanel("Peek-A-Boo !\0", FALSE);
if ( result != AWE_NO_ERR ) {
switch ( result ) {
case AWE_ERR_DLL_BUSY:
MessageBox(NULL, "DLL Busy\0", "Error\0", MB_OK);
break;
case AWE_ERR_SYSMEM_INSUFFICIENT:
MessageBox(NULL,"Insufficient Memory\0", "Error\0", MB_OK);
break;
case AWE_ERR_ACTIVATE_BOB:
MessageBox(NULL,"BOB already activated\0", "Error\0", MB_OK);
break;
case AWE_ERR_DEVICE_DRV_INVALID:
MessageBox(NULL,"Invalid driver\0", "Error\0", MB_OK);
break;
}
}
break;
}
case ID_GUI_CONTROLLER: {
LRESULT result = lpControllerBob("Peek-A-Boo Two !\0", FALSE);
if ( result != AWE_NO_ERR ) {
switch ( result ) {
case AWE_ERR_DLL_BUSY:
MessageBox(NULL,"DLL Busy\0", "Error\0", MB_OK);
break;
case AWE_ERR_SYSMEM_INSUFFICIENT:
MessageBox(NULL,"Insufficient Memory\0", "Error\0", MB_OK);
break;
case AWE_ERR_ACTIVATE_BOB:
MessageBox(NULL,"BOB already activated\0", "Error\0", MB_OK);
break;
case AWE_ERR_DEVICE_DRV_INVALID:
MessageBox(NULL,"Invalid driver\0", "Error\0", MB_OK);
break;
}
}
break;
}
case ID_MISC_SYNTHBANK_GM:
hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
if ( lpAWEManager(hAWEHandle, AWE_SELECT_SYN_BANK, GENERAL_MIDI, NULL) == AWE_NO_ERR )
MessageBox(NULL, "Set synthesizer mode to General MIDI successful.\0", "Info\0", MB_OK);
else
MessageBox(NULL, "Set GM failed.\0", "Error\0", MB_OK);
SetCursor(hCursor);
break;
case ID_MISC_SYNTHBANK_GS:
hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
if ( lpAWEManager(hAWEHandle, AWE_SELECT_SYN_BANK, ROLAND_GS, NULL) == AWE_NO_ERR )
MessageBox(NULL, "Set synthesizer mode to GS successful.\0", "Info\0", MB_OK);
else
MessageBox(NULL, "Set GS failed.\0", "Error\0", MB_OK);
SetCursor(hCursor);
break;
case ID_MISC_SYNTHBANK_MT32:
hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
if ( lpAWEManager(hAWEHandle, AWE_SELECT_SYN_BANK, MT_32, NULL) == AWE_NO_ERR )
MessageBox(NULL, "Set synthesizer mode to MT-32 successful.\0", "Info\0", MB_OK);
else
MessageBox(NULL, "Set MT-32 failed.\0", "Error\0", MB_OK);
SetCursor(hCursor);
break;
case ID_SETTINGS_REVERB_ROOM1 :
case ID_SETTINGS_REVERB_ROOM2 :
case ID_SETTINGS_REVERB_ROOM3 :
case ID_SETTINGS_REVERB_HALL1 :
case ID_SETTINGS_REVERB_HALL2 :
case ID_SETTINGS_REVERB_PLATE :
case ID_SETTINGS_REVERB_DELAY :
case ID_SETTINGS_REVERB_PANNINGDELAY :
SetReverb(wParam);
break;
case ID_SETTINGS_CHORUS_CHORUS1 :
case ID_SETTINGS_CHORUS_CHORUS2 :
case ID_SETTINGS_CHORUS_CHORUS3 :
case ID_SETTINGS_CHORUS_CHORUS4 :
case ID_SETTINGS_CHORUS_FEEBACKCHORUS :
case ID_SETTINGS_CHORUS_FLANGER :
case ID_SETTINGS_CHORUS_SHORTDELAY :
case ID_SETTINGS_CHORUS_SHORTDELAYFB :
SetChorus(wParam);
break;
}
break;
}
break;
case WM_DESTROY:
if ( bIsMIDIPlaying == TRUE ) {
if ( MCIEndPlay(wMCIDeviceID) )
MessageBox(NULL, "Error stop playing MCISEQ.\0", "Error.\0", MB_OK|MB_ICONSTOP);
if ( MCICloseDevice(wMCIDeviceID) )
MessageBox(NULL, "Error closing MCISEQ.\0", "Error.\0", MB_OK|MB_ICONSTOP);
}
if ( bIsUserBankLoaded == TRUE ) {
if ( lpAWEManager(hAWEHandle, AWE_CLEAR_USER_BANK, USER_BANK_NUM, NULL) != AWE_NO_ERR )
MessageBox(NULL, "Error clearing user bank\0", "Error\0", MB_OK|MB_ICONHAND);
}
if ( CloseAWEMAN() == FALSE )
MessageBox(NULL, "Error closing AWEMAN\0", "Error", MB_OK|MB_ICONSTOP);
FreeLibrary(hAWEMANDLL);
FreeLibrary(hAWEGUIDLL);
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
return (NULL);
}
BOOL __export CALLBACK About(HWND hDlg,
unsigned message,
WORD wParam,
LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return (TRUE);
case WM_COMMAND:
if (wParam == IDOK
|| wParam == IDCANCEL)
{
EndDialog(hDlg, TRUE);
return (TRUE);
}
break;
}
return (FALSE);
}
BOOL __export CALLBACK TriggerMe(HWND hDlg,
unsigned message,
WORD wParam,
LPARAM lParam)
{
#define BIG_ON 0x007F3C90
#define BIG_OFF 0x00003C90
#define PATCH_SET 0x00007FC0
DWORD dwErr;
char ach[128];
DWORD dwPresetNumber;
static DWORD dwMIDINumber = 0xF;
BOOL fTranslated;
switch (message)
{
case WM_INITDIALOG:
// Set to preset 1 on startup, MIDI channel 16
SetDlgItemInt(hDlg, IDC_PC, 0x0, FALSE);
SetDlgItemInt(hDlg, IDC_MIDI, 0xF, FALSE);
return (TRUE);
case WM_COMMAND:
switch ( wParam ) {
case IDOK:
EndDialog(hDlg, TRUE);
return TRUE;
case IDC_BIGON:
dwErr = lpAWEManager(hAWEHandle, AWE_SEND_MIDI, BIG_ON+dwMIDINumber, NULL);
if ( dwErr != AWE_NO_ERR ) {
(void)wsprintf(ach, "Error code = %d\0", (WORD)dwErr);
MessageBox(NULL, ach, "Error\0", MB_OK|MB_ICONSTOP);
}
return TRUE;
case IDC_BIGOFF:
dwErr = lpAWEManager(hAWEHandle, AWE_SEND_MIDI, BIG_OFF+dwMIDINumber, NULL);
if ( dwErr != AWE_NO_ERR ) {
(void)wsprintf(ach, "Error code = %d\0", (WORD)dwErr);
MessageBox(NULL, ach, "Error\0", MB_OK|MB_ICONSTOP);
}
return TRUE;
case IDC_SETPATCH:
// Get the patch number
dwPresetNumber = (DWORD)GetDlgItemInt(hDlg, IDC_PC, (BOOL FAR*)&fTranslated, FALSE);
if ( dwPresetNumber > 0x7F )
dwPresetNumber = 0x7F;
dwPresetNumber = (dwPresetNumber << 8) + dwMIDINumber + 0xC0;
dwErr = lpAWEManager(hAWEHandle, AWE_SEND_MIDI, dwPresetNumber, NULL);
if ( dwErr != AWE_NO_ERR ) {
(void)wsprintf(ach, "Error code = %d\0", (WORD)dwErr);
MessageBox(NULL, ach, "Error\0", MB_OK|MB_ICONSTOP);
}
return TRUE;
case IDC_SETMIDI:
// Get the MIDI channel
dwMIDINumber = (DWORD)GetDlgItemInt(hDlg, IDC_MIDI, (BOOL FAR*)&fTranslated, FALSE);
if ( dwMIDINumber > 0xF )
dwMIDINumber = 0xF;
return TRUE;
}
break;
}
return (FALSE);
}
BOOL InitAWEDLL(void)
{
hAWEGUIDLL = LoadLibrary("AWEGUI.DLL");
if ( hAWEGUIDLL > HINSTANCE_ERROR ) {
lpControlPanel = (LPCONTROLPANEL)GetProcAddress(hAWEGUIDLL, "AWEControlPanel");
lpControllerBob = (LPCONTROLPANEL)GetProcAddress(hAWEGUIDLL, "AWEControllerBob");
if ( lpControlPanel == NULL || lpControllerBob == NULL )
return FALSE;
}
hAWEMANDLL = LoadLibrary("AWEMAN.DLL");
if ( hAWEGUIDLL > HINSTANCE_ERROR ) {
lpAWEManager = (LPFNAWEMANAGER)GetProcAddress(hAWEMANDLL, "AWEManager");
if ( lpAWEManager == NULL)
return FALSE;
}
return TRUE;
}
BOOL OpenAWEMAN()
{
if ( lpAWEManager(NULL, AWE_OPEN, (LPARAM)(LPSTR)&hAWEHandle, NULL) == AWE_NO_ERR )
return TRUE;
else
return FALSE;
}
BOOL CloseAWEMAN()
{
if ( lpAWEManager(hAWEHandle, AWE_CLOSE, NULL, NULL ) == AWE_NO_ERR )
return TRUE;
else
return FALSE;
}
BOOL FetchMIDIFile(HWND hWnd)
{
char szMIDIExt[] = "MIDI\0*.MID; *.RMI\0";
WORD wReturnVal = 0;
DWORD dwErrorVal = 0;
OPENFILENAME ofnMIDI;
// char szInitFile[128]
strcpy(szFileName, szBareName);
// szFileName[0] = 0;
ofnMIDI.lStructSize = sizeof(OPENFILENAME);
ofnMIDI.hwndOwner = hWnd;
ofnMIDI.hInstance = hInst;
ofnMIDI.lpstrFilter = szMIDIExt;
ofnMIDI.lpstrCustomFilter = NULL;
ofnMIDI.nMaxCustFilter = 0L;
ofnMIDI.nFilterIndex = 1L;
ofnMIDI.lpstrFile = (LPSTR)szFileName;
ofnMIDI.nMaxFile = 128;
ofnMIDI.lpstrInitialDir = NULL;
ofnMIDI.lpstrTitle = NULL;
ofnMIDI.lpstrFileTitle = (LPSTR)szBareName;
ofnMIDI.lpstrDefExt = NULL;
ofnMIDI.Flags = 0;
wReturnVal = GetOpenFileName((LPOPENFILENAME)&ofnMIDI);
if ( wReturnVal > 0 )
return TRUE;
else
return FALSE;
}
BOOL FetchUserBankFile(HWND hWnd)
{
char szSBKExt[] = "SoundFont Bank\0*.SBK\0";
WORD wReturnVal = 0;
DWORD dwErrorVal = 0;
OPENFILENAME ofnSBK;
ofnSBK.lStructSize = sizeof(OPENFILENAME);
ofnSBK.hwndOwner = hWnd;
ofnSBK.hInstance = hInst;
ofnSBK.lpstrFilter = szSBKExt;
ofnSBK.lpstrCustomFilter = NULL;
ofnSBK.nMaxCustFilter = 0L;
ofnSBK.nFilterIndex = 1L;
ofnSBK.lpstrFile = (LPSTR)szUserBankName;
ofnSBK.nMaxFile = 128;
ofnSBK.lpstrInitialDir = NULL;
ofnSBK.lpstrTitle = NULL;
ofnSBK.lpstrFileTitle = NULL;
ofnSBK.lpstrDefExt = NULL;
ofnSBK.Flags = 0;
wReturnVal = GetOpenFileName((LPOPENFILENAME)&ofnSBK);
if ( wReturnVal > 0 )
return TRUE;
else
return FALSE;
}
void SetReverb(WORD wParam)
{
CParamObject param;
enum TYPEINDEX m_CurEfxType;
enum VARIINDEX m_CurTypeVari[2];
param.m_VariIndex[REVERB] = param.m_VariIndex[CHORUS] = 0;
lpAWEManager(hAWEHandle, AWE_GET_EFX, (LPARAM)(LPSTR)¶m, (LPARAM)0L);
m_CurEfxType = (enum TYPEINDEX)param.m_TypeIndex;
if ( m_CurEfxType == REVERB_CHORUS ) {
// Correct !
m_CurTypeVari[REVERB] = (enum VARIINDEX)param.m_VariIndex[REVERB];
m_CurTypeVari[CHORUS] = (enum VARIINDEX)param.m_VariIndex[CHORUS];
// Now issue selection on REVERB
switch ( wParam ) {
case ID_SETTINGS_REVERB_ROOM1 :
param.m_VariIndex[REVERB] = (enum VARIINDEX)ROOM_1; break;
case ID_SETTINGS_REVERB_ROOM2 :
param.m_VariIndex[REVERB] = (enum VARIINDEX)ROOM_2; break;
case ID_SETTINGS_REVERB_ROOM3 :
param.m_VariIndex[REVERB] = (enum VARIINDEX)ROOM_3; break;
case ID_SETTINGS_REVERB_HALL1 :
param.m_VariIndex[REVERB] = (enum VARIINDEX)HALL_1; break;
case ID_SETTINGS_REVERB_HALL2 :
param.m_VariIndex[REVERB] = (enum VARIINDEX)HALL_2; break;
case ID_SETTINGS_REVERB_PLATE :
param.m_VariIndex[REVERB] = (enum VARIINDEX)PLATE; break;
case ID_SETTINGS_REVERB_DELAY :
param.m_VariIndex[REVERB] = (enum VARIINDEX)DELAY; break;
case ID_SETTINGS_REVERB_PANNINGDELAY :
param.m_VariIndex[REVERB] = (enum VARIINDEX)PANNING_DELAY; break;
}
if ( lpAWEManager(hAWEHandle, AWE_SELECT_EFX, (LPARAM)(LPSTR)¶m, (LPARAM)0L) != AWE_NO_ERR ) {
MessageBox(NULL, "Error in setting effect.\0",
"Error\0",
MB_OK|MB_ICONSTOP);
}
else {
MessageBox(NULL, "Effect setting successful.\0",
"OK !\0",
MB_OK|MB_ICONINFORMATION);
}
}
else {
MessageBox(NULL, "Current effect type is not Reverb/Chorus.\0",
"Error\0",
MB_OK|MB_ICONSTOP);
}
}
void SetChorus(WORD wParam)
{
CParamObject param;
enum TYPEINDEX m_CurEfxType;
enum VARIINDEX m_CurTypeVari[2];
param.m_VariIndex[REVERB] = param.m_VariIndex[CHORUS] = 0;
lpAWEManager(hAWEHandle, AWE_GET_EFX, (LPARAM)(LPSTR)¶m, 0L);
m_CurEfxType = (enum TYPEINDEX)param.m_TypeIndex;
if ( m_CurEfxType == REVERB_CHORUS ) {
// Correct !
m_CurTypeVari[REVERB] = (enum VARIINDEX)param.m_VariIndex[REVERB];
m_CurTypeVari[CHORUS] = (enum VARIINDEX)param.m_VariIndex[CHORUS];
// Now issue selection on CHORUS
switch ( wParam ) {
case ID_SETTINGS_CHORUS_CHORUS1 :
param.m_VariIndex[CHORUS] = (enum VARIINDEX)CHORUS_1; break;
case ID_SETTINGS_CHORUS_CHORUS2 :
param.m_VariIndex[CHORUS] = (enum VARIINDEX)CHORUS_2; break;
case ID_SETTINGS_CHORUS_CHORUS3 :
param.m_VariIndex[CHORUS] = (enum VARIINDEX)CHORUS_3; break;
case ID_SETTINGS_CHORUS_CHORUS4 :
param.m_VariIndex[CHORUS] = (enum VARIINDEX)CHORUS_4; break;
case ID_SETTINGS_CHORUS_FEEBACKCHORUS :
param.m_VariIndex[CHORUS] = (enum VARIINDEX)FEEDBACK_DELAY; break;
case ID_SETTINGS_CHORUS_FLANGER :
param.m_VariIndex[CHORUS] = (enum VARIINDEX)FLANGER; break;
case ID_SETTINGS_CHORUS_SHORTDELAY :
param.m_VariIndex[CHORUS] = (enum VARIINDEX)SHORT_DELAY; break;
case ID_SETTINGS_CHORUS_SHORTDELAYFB :
param.m_VariIndex[CHORUS] = (enum VARIINDEX)SHORT_DELAY_FB; break;
}
if ( lpAWEManager(hAWEHandle, AWE_SELECT_EFX, (LPARAM)(LPSTR)¶m, 0L) != AWE_NO_ERR ) {
MessageBox(NULL, "Error in setting effect.\0",
"Error\0",
MB_OK|MB_ICONSTOP);
}
else {
MessageBox(NULL, "Effect setting successful.\0",
"OK !\0",
MB_OK|MB_ICONINFORMATION);
}
}
else {
MessageBox(NULL, "Current effect type is not Reverb/Chorus.\0",
"Error\0",
MB_OK|MB_ICONSTOP);
}
}